package com.netty.nio;


import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.nio.MappedByteBuffer;

/**
 * 1.MappedByteBuffer 可以让文件在内存(堆外内存)中修改,即操作系统不需要在拷贝一次
 */
public class MappedByteBufferTest {
    public static void main(String[] args) throws Exception {
        RandomAccessFile randomAccessFile = new RandomAccessFile("1.txt", "rw");
        //获取对应的通道
        FileChannel channel = randomAccessFile.getChannel();
        /*
             FileChannel.MapMode.READ_WRITE: 表示读写模式,
             0: 表示可以直接修改的起始位置
             5: 表示映射到内存的大小,表示最大可以映射5个字节到内存,即可以直接修改的范围时0-5(不包含5),5是大小而不是索引
             实际类型是DirectByteBuffer
         */
        MappedByteBuffer mappedByteBuffer = channel.map(FileChannel.MapMode.READ_WRITE, 0, 5);
        mappedByteBuffer.put(0, (byte) 'H');
        mappedByteBuffer.put(3, (byte) '9');
        randomAccessFile.close();
        System.out.println("修改成功!");
    }
}
